//#include <iostream>
//#include <functional>
//
//int Sub(int x, int y)
//{
//	return x - y;
//}
//
//
//int main()
//{
//	//绑定第一个形参是y，第二个形参是x
//	auto f1 = std::bind(Sub, std::placeholders::_2, std::placeholders::_1);
//	std::cout << f1(10,8) << std::endl;//f1(int y,int x)
//	//运行结果：
//	//-2
//	return 0;
//}

//#include<iostream>
//#include <string>
//
//void func3()
//{
//	int z;
//	std::cin >> z;
//	if (z == 0)
//	{
//		throw 1;
//	}
//	else
//	{
//		std::cout << z;
//	}
//}
//
//int func2(int x, int y)
//{
//	if (x == 0)
//	{
//		throw "Division by zero condition!";
//	}
//	else
//	{
//		func3();
//		return y / x;
//	}
//}
//
//void func1()
//{
//	int x = 0;
//	std::cin >> x;
//	int y = 10;
//	func2(x, y);
//}
//
//int main()
//{
//	try
//	{
//		func1();
//	}
//	catch(const char* strerror1)
//	{
//		std::cout << "捕获异常: const char*" << std::endl;
//	}
//	catch (int x)
//	{
//		std::cout << "捕获异常 int" << std::endl;
//	}
//	//运行结果：
//	//0
//	//捕获异常: const char*
//
//	//1
//	//0
//	//捕获异常 int
//	return 0;
//}
//#include <iostream>
//class A
//{
//public:
//	A()
//	{
//		_ptr1 = new int(0);
//		_ptr2 = new int(0);
//	}
//	~A()
//	{
//		try
//		{
//			delete _ptr1;
//			throw 1;//抛出异常，_ptr2没有被释放，造成内存泄漏
//			delete _ptr2;
//			std::cout << "delete end!" << std::endl;
//		}
//		catch (int)
//		{
//			;
//		}
//	}
//protected:
//	int* _ptr1;
//	int* _ptr2;
//};
//
//int main()
//{
//	A a;
//	//无输出
//	return 0;
//}

//#include <iostream>
//void _Func()
//{
//	throw "_Func error";
//}
//void Func()
//{
//	int* arr = nullptr;
//	try
//	{
//		int* arr = new int[100];
//		_Func();
//	}
//	catch (const char* strerrno)//异常处理之前得先释放arr，再抛出是为了让main函数统一的处理异常
//	{
//		std::cout << "delete success" << std::endl;
//		delete[] arr;
//		throw strerrno;
//	}
//
//}
//
//int main()
//{
//	try
//	{
//		Func();
//	}
//	catch(const char* )
//	{
//		//统一处理异常
//	}
//	//运行结果：
//	//delete success
//	return 0;
//}

#include <iostream>
void _Func()
{
	throw "_Func error";
}
void Func()
{
	int* arr = nullptr;
	try
	{
		int* arr = new int[100];
		_Func();
	}
	catch (...)
	{
		//捕获异常不是为了处理异常，是释放指针防止内存泄漏
		std::cout << "delete success" << std::endl;
		delete[] arr;
		throw;//异常的再抛出，抛给外层main
	}

}

int main()
{
	try
	{
		Func();
	}
	catch (const char*)
	{
		//统一处理异常
	}
	//运行结果：
	//delete success
	return 0;
}